package phase01module02.homework;

/**
 *      3.1 第一步：设计和实现以下类
 *     （1）手机卡类 特征：卡类型、卡号、用户名、密码、账户余额、通话时长(分钟)、上网流量 行为：显示（卡号 + 用户名 + 当前余额）
 *     （2）通话套餐类 特征：通话时长、短信条数、每月资费 行为: 显示所有套餐信息
 *     （3）上网套餐类 特征：上网流量、每月资费 行为：显示所有套餐信息
 *     （4）用户消费信息类 特征：统计通话时长、统计上网流量、每月消费金额
 *
 *     3.2 第二步：设计和实现以下枚举类 手机卡的类型总共有 3 种：大卡、小卡、微型卡
 *
 *     3.3 第三步：实体类的优化 将通话套餐类和上网套餐类中相同的特征和行为提取出来组成抽象套餐类。
 *
 *     3.4 第四步：创建并实现以下接口
 *     （1）通话服务接口 抽象方法: 参数1: 通话分钟, 参数2: 手机卡类对象 让通话套餐类实现通话服务接口。
 *     （2）上网服务接口 抽象方法: 参数1: 上网流量, 参数2: 手机卡类对象 让上网套餐类实现上网服务接口。
 *
 *      3.5 第五步：进行代码测试
 *      编写测试类使用多态格式分别调用上述方法，方法体中打印一句话进行功能模拟即可。
 *
 *      接口：
 *      1.通话服务接口（通话时间，手机卡类型）  TeleInterface
 *      2.上网流量接口（上网流量，手机卡类型）  SurfInterface
 *
 *      抽象类
 *      1.抽象类
 *      普通类
 *      1.普通套餐类 TeleClass 实现抽象类/通话服务接口  抽象类方法未重写
 *      2.上网套餐类 SurfClass 实现抽象类/上网服务接口  抽象方法未重写
 *      3.用户消费类 Bill       未实现统计方法
 *      4.手机卡类   PhoneCard
 *      枚举类
 *      1.枚举类 Enum
 */
public class InterfaceClassTest {

    public static void main(String[] args) {
        System.out.println("-----------注册手机-----------");
        //订购通话套餐
        Abstract teleClass = new TeleClass(1, 0, 0);
        //订购上网套餐
        Abstract surfClass = new SurfClass(1, 0);
        //创建消费统计
        Bill bill = new Bill(teleClass.getQuantity(), surfClass.getQuantity(), 20);
        //注册一张手机卡，枚举手机卡类型：大卡
        PhoneCard phoneCard = new PhoneCard(Enum.A.getSize(), "10000", "用户名", "密码", 1000, teleClass.getQuantity(), surfClass.getQuantity());
        //打印手机卡信息
        phoneCard.show(teleClass.getQuantity(), surfClass.getQuantity());
        //消费
        phoneCard.addTele(120, phoneCard);
        phoneCard.addSurf(20, phoneCard);
        //显示账户余额
        phoneCard.showAccountBalance();

        //再次消费测试
        phoneCard.addTele(120, phoneCard);
        phoneCard.addSurf(20, phoneCard);
        phoneCard.addTele(120, phoneCard);
        phoneCard.addSurf(20, phoneCard);
        phoneCard.showAccountBalance();
    }
}
